
# -*- coding: utf-8 -*-

from django.shortcuts import render_to_response, redirect
from comunidadcyt.mensajesPrivados.models import MensajesPrivados
from comunidadcyt.mensajesPrivados.forms import MensajesPrivadosForm
from django.db.models import Q
from django.core.urlresolvers import reverse
from django.template.context import RequestContext
from django.views.generic.create_update import delete_object
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist



def obtenerMensajesPrivados(request,object_id):
    if int(object_id):
        try:
            objectoGrupoI = MensajesPrivados.objects.get(id=object_id)
        except ObjectDoesNotExist:
            return 'No existe el objecto mensaje'
    else:
        return 'No existe el objecto mensaje'
    return objectoGrupoI

def crear(request):
    form = MensajesPrivadosForm()
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Nuevo',request.path)])
    return render_to_response('mensajes/nuevo.html', {'estado':'crear', 'form':form, 'user': request.user}, context_instance=RequestContext(request))

def crearGuardar(request):
    if request.method=='GET':
        form = MensajesPrivadosForm(request.GET.copy())
        if form.is_valid():
            control = len(form.cleaned_data['UsuariosDestino']) + len(form.cleaned_data['GruposDestino']) +len(form.cleaned_data['ProyectosDestino'])
            if control > 0 :
                form.save()
                return redirect(reverse(borradores))
            else:
                request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Nuevo',request.path)])
                return render_to_response('mensajes/nuevo.html', {'estado':'crear', 'form':form, 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request)) 
        else:
            request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Nuevo',request.path)])
            return render_to_response('mensajes/nuevo.html', {'estado':'crear', 'form':form, 'user': request.user}, context_instance=RequestContext(request))
        
def crearEnviar(request):
    if request.method=='GET':
        nuevoMens = MensajesPrivados(Enviado=True)
        nuevoMens.save()
        form = MensajesPrivadosForm(request.GET.copy(), instance = nuevoMens)
        if form.is_valid():
            control = len(form.cleaned_data['UsuariosDestino']) + len(form.cleaned_data['GruposDestino']) +len(form.cleaned_data['ProyectosDestino'])
            if control > 0 :
                form.save()
                return redirect(reverse(enviados))
            else:
                nuevoMens.delete()
                request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Nuevo',request.path)])
                return render_to_response('mensajes/nuevo.html', {'estado':'crear', 'form':form, 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request)) 
        else:
            request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Nuevo',request.path)])
            return render_to_response('mensajes/nuevo.html', {'estado':'crear', 'form':form, 'user': request.user}, context_instance=RequestContext(request))

def modificar(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Editar '+mens.Asunto,request.path)])
    return render_to_response('mensajes/nuevo.html', {'estado':'modificar', 'mensaje_id': mens.id, 'form':MensajesPrivadosForm(instance=mens), 'user': request.user}, context_instance=RequestContext(request))

def guardar(request, object_id):
    if request.method=='GET':
        form = MensajesPrivadosForm(request.GET.copy())
        mens = obtenerMensajesPrivados(request, object_id)
        if form.is_valid():
            control = len(form.cleaned_data['UsuariosDestino']) + len(form.cleaned_data['GruposDestino']) +len(form.cleaned_data['ProyectosDestino'])
            if control > 0 :
                nuevoMens = obtenerMensajesPrivados(request, object_id)
                nuevoMens.Asunto = form.cleaned_data['Asunto']
                nuevoMens.Mensaje = form.cleaned_data['Mensaje']
                nuevoMens.Enviado = False 
                nuevoMens.UsuariosDestino = form.cleaned_data['UsuariosDestino']
                nuevoMens.GruposDestino = form.cleaned_data['GruposDestino']
                nuevoMens.ProyectosDestino = form.cleaned_data['ProyectosDestino']
                nuevoMens.save()
                return redirect(reverse(borradores))
            else:
                request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Editar '+mens.Asunto,request.path)])
                return render_to_response('mensajes/nuevo.html', {'estado':'modificar', 'form':form, 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request))
        else:
            request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Editar '+mens.Asunto,request.path)])
            return render_to_response('mensajes/nuevo.html', {'estado':'modificar', 'form':form, 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request))
        
def enviar(request, object_id):
    if request.method=='GET':
        form = MensajesPrivadosForm(request.GET.copy())
        mens = obtenerMensajesPrivados(request, object_id)
        if form.is_valid():
            control = len(form.cleaned_data['UsuariosDestino']) + len(form.cleaned_data['GruposDestino']) +len(form.cleaned_data['ProyectosDestino'])
            if control > 0 :
                nuevoMens = obtenerMensajesPrivados(request, object_id)
                nuevoMens.Asunto = form.cleaned_data['Asunto']
                nuevoMens.Mensaje = form.cleaned_data['Mensaje']
                nuevoMens.Enviado = True 
                nuevoMens.UsuariosDestino = form.cleaned_data['UsuariosDestino']
                nuevoMens.GruposDestino = form.cleaned_data['GruposDestino']
                nuevoMens.ProyectosDestino = form.cleaned_data['ProyectosDestino']
                nuevoMens.save()
                return redirect(reverse(enviados))
            else:
                request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Editar '+mens.Asunto,request.path)])
                return render_to_response('mensajes/nuevo.html', {'estado':'modificar', 'form':form, 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request))
        else:
            request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Editar '+mens.Asunto,request.path)])
            return render_to_response('mensajes/nuevo.html', {'estado':'modificar', 'form':form, 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request))

def enviarBorrador(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    print mens
    control = len(mens.UsuariosDestino.all()) + len(mens.GruposDestino.all()) +len(mens.ProyectosDestino.all())
    print control
    if control > 0 :
        mens.Enviado = True
        mens.save()  
        return redirect(reverse(enviados))
    else:
        request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Error en el Mensaje = '+mens.Asunto,request.path)])
        return render_to_response('mensajes/nuevo.html', {'estado':'modificar', 'form':MensajesPrivadosForm(instance=mens), 'error': 'No ha seleccionado un destinatario.', 'user': request.user}, context_instance=RequestContext(request))
 
def recibidos(request):
    estado = 'recibidos'
    lista = MensajesPrivados.objects.filter(
                                            Q(UsuariosDestino__username = request.user.username)|
                                            Q(GruposDestino__Miembros__username = request.user.username)| 
                                            Q(ProyectosDestino__Miembros__username = request.user.username) ,
                                            Enviado = True  
                                            ).distinct()
    request.breadcrumbs([('Mensajeria',request.path),('Recibidos','')])
    return render_to_response ('mensajes/buzones.html', {'estado': estado, 'object_list': lista, 'user': request.user}, context_instance=RequestContext(request))

def enviados(request):
    estado = 'enviados'
    lista = MensajesPrivados.objects.filter(Remitente = request.user.get_full_name(), Enviado = True)
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Enviados',request.path)])
    return render_to_response('mensajes/buzones.html', {'estado': estado, 'object_list': lista, 'user': request.user}, context_instance=RequestContext(request))

def borradores(request):
    estado = 'borradores'
    lista = MensajesPrivados.objects.filter(Remitente = request.user.get_full_name(), Enviado = False)
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',request.path)])
    return render_to_response('mensajes/buzones.html', {'estado': estado, 'object_list': lista, 'user': request.user}, context_instance=RequestContext(request))


def detallesEnviados(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    
    if mens == 'No existe el objecto mensaje':
        return render_to_response('error.html',{'error':'No existe el objecto mensaje', 'archivo': 'view de mensajesPrivado', 'linea': 'linea 19'})
    
    request.breadcrumbs([('Mensajeria',reverse(enviados)),('Enviados',reverse(enviados)),('Ver '+mens.Asunto,request.path)])

    des = []
    if mens.ProyectosDestino:
        for p in mens.ProyectosDestino.all():
            for u in p.Miembros.all():
                if u not in des:
                    des.append(u.get_full_name())
    if mens.GruposDestino:
        for g in mens.GruposDestino.all():
            for u in g.Miembros.all():
                if u not in des:
                    des.append(u.get_full_name())
    if mens.UsuariosDestino:
        for u in mens.UsuariosDestino.all():
            if u not in des:
                    des.append(u.get_full_name())
    return render_to_response('mensajes/detalles.html', {'object': MensajesPrivados.objects.get(id=object_id), 'estado':'enviados', 'user': request.user, 'dest':des}, context_instance=RequestContext(request))


def detallesRecibidos(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    
    if mens == 'No existe el objecto mensaje':
        return render_to_response('error.html',{'error':'No existe el objecto mensaje', 'archivo': 'view de mensajesPrivado', 'linea': 'linea 19'})

    mens.Leido = True
    mens.save()
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Recibidos',reverse(recibidos)),('Ver '+mens.Asunto,request.path)])
   
    des = []
    if mens.ProyectosDestino:
        for p in mens.ProyectosDestino.all():
            for u in p.Miembros.all():
                if u not in des:
                    des.append(u.get_full_name())
    if mens.GruposDestino:
        for g in mens.GruposDestino.all():
            for u in g.Miembros.all():
                if u not in des:
                    des.append(u.get_full_name())
    if mens.UsuariosDestino:
        for u in mens.UsuariosDestino.all():
            if u not in des:
                    des.append(u.get_full_name())
                    
    
    return render_to_response('mensajes/detalles.html', {'object': MensajesPrivados.objects.get(id=object_id), 'estado':'recibidos', 'user': request.user, 'dest':des}, context_instance=RequestContext(request))

def borrarRecibidos(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    if mens == 'No existe el objecto mensaje':
        return render_to_response('error.html',{'error':'No existe el objecto mensaje', 'archivo': 'view de mensajesPrivado', 'linea': 'linea 19'})
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Recibidos',''),('Borrar Mensaje: '+mens.Asunto,request.path)])
    return delete_object(request,
                         model = MensajesPrivados, 
                         template_name = 'mensajes/confirm_delete.html', 
                         post_delete_redirect = '/comunidadcyt/mensajeria/recibidos',
                         object_id = object_id
                         )
def borrarEnviados(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    if mens == 'No existe el objecto mensaje':
        return render_to_response('error.html',{'error':'No existe el objecto mensaje', 'archivo': 'view de mensajesPrivado', 'linea': 'linea 19'})
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Enviados',reverse(enviados)),('Borrar Mensaje: '+mens.Asunto,request.path)])
    return delete_object(request,
                         model = MensajesPrivados, 
                         template_name = 'mensajes/confirm_delete.html', 
                         post_delete_redirect = '/comunidadcyt/mensajeria/enviados',
                         object_id = object_id
                         )
def borrarBorradores(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    if mens == 'No existe el objecto mensaje':
        return render_to_response('error.html',{'error':'No existe el objecto mensaje', 'archivo': 'view de mensajesPrivado', 'linea': 'linea 19'})
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Borradores',reverse(borradores)),('Borrar Mensaje: '+mens.Asunto,request.path)])
    return delete_object(request,
                         model = MensajesPrivados, 
                         template_name = 'mensajes/confirm_delete.html', 
                         post_delete_redirect = '/comunidadcyt/mensajeria/borradores',
                         object_id = object_id
                         )
    
def responder(request, object_id):
    mens = obtenerMensajesPrivados(request, object_id)
    if mens == 'No existe el objecto mensaje':
        return render_to_response('error.html',{'error':'No existe el mensaje que desea responder', 'archivo': 'view de mensajesPrivado', 'linea': 'linea 19'})
    asunto = "Re: " + mens.Asunto
    mensaje = mens.Mensaje
    full_name = mens.Remitente.split(" ")
    try:
        u =  User.objects.get(first_name = full_name[0], last_name = full_name[1])
    except ObjectDoesNotExist:
        return render_to_response('error.html',{'error':'No existe el destinatario', 'archivo': 'view de mensajesPrivado', 'linea': 'línea 247'})
    data = {'Asunto': asunto, 'Mensaje': mensaje, 'UsuariosDestino': [u.id]}
    form = MensajesPrivadosForm(initial=data)
    form['UsuariosDestino'].field.help_text = "El usuario seleccionado es el remitente del mensaje que esta respondiendo"
    request.breadcrumbs([('Mensajeria',reverse(recibidos)),('Responder',request.path)])
    return render_to_response('mensajes/nuevo.html', {'estado':'crear', 'form':form, 'user': request.user}, context_instance=RequestContext(request))

    
    